home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / esc.jar / com / extensibility / xml / Schema.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-06-30  |  33.9 KB  |  1,520 lines

  1. package com.extensibility.xml;
  2.  
  3. import com.extensibility.util.Debug;
  4. import com.extensibility.util.FilteredEnumerator;
  5. import com.extensibility.util.HashVector;
  6. import com.extensibility.util.StringUtilities;
  7. import com.extensibility.util.XASet;
  8. import com.extensibility.xml.dt.DataType;
  9. import com.extensibility.xml.dt.DataTypeEnumeration;
  10. import com.extensibility.xml.dt.DataTypeIntf;
  11. import java.io.IOException;
  12. import java.io.Writer;
  13. import java.util.Enumeration;
  14. import java.util.Hashtable;
  15. import java.util.Vector;
  16.  
  17. public class Schema implements SchemaIntf {
  18.    CommentList comments;
  19.    FirstNameHashtable notations;
  20.    FirstNameHashtable parameterEntities;
  21.    FirstNameHashtable generalEntities;
  22.    FirstNameHashtable elements;
  23.    FirstNameHashtable namespaces;
  24.    FirstNameHashtable datatypes;
  25.    final UnknownOwnerList unknownOwnerList = new UnknownOwnerList(this);
  26.    final HashVectors unknownModelGroups = new HashVectors();
  27.    final HashVectors unknownAttrGroups = new HashVectors();
  28.    Vector declarations;
  29.    Vector parseErrors;
  30.    ExternalSubset documentStructure;
  31.    URI baseURI;
  32.    URI baseNamespace;
  33.    String schemaPrefix;
  34.    SchemaFlavorIntf flavor;
  35.    URIResolver moduleResolver;
  36.    MetaPropHash metaProps = new MetaPropHash();
  37.    boolean printValidatedBy = false;
  38.    boolean showErrors = false;
  39.    HashVector refRegistry = new HashVector();
  40.    HashVector prefixRegistry = new HashVector();
  41.    Hashtable nsSchemas = new Hashtable();
  42.    String encoding;
  43.    String schemaPath = null;
  44.  
  45.    public Schema(URI var1, String var2) {
  46.       this.baseURI = var1;
  47.       this.init(var2);
  48.       this.setFlavor(var2);
  49.    }
  50.  
  51.    private void init(String var1) {
  52.       this.documentStructure = new ExternalSubset((ExternalSubset)null, var1, this.baseURI, (URI)null);
  53.       this.notations = new FirstNameHashtable(this, Class.forName("com.extensibility.xml.NotationDeclaration"));
  54.       this.parameterEntities = new FirstNameHashtable(this, Class.forName("com.extensibility.xml.ParameterEntityDeclaration"));
  55.       this.generalEntities = new FirstNameHashtable(this, Class.forName("com.extensibility.xml.GeneralEntityDeclaration"));
  56.       this.elements = new FirstNameHashtable(this, Class.forName("com.extensibility.xml.ElementDeclaration"));
  57.       this.namespaces = new FirstNameHashtable(this, Class.forName("com.extensibility.xml.NamespaceDeclaration"));
  58.       this.datatypes = new FirstNameHashtable(this, Class.forName("com.extensibility.xml.DataTypeDeclaration"));
  59.       this.declarations = new Vector();
  60.       this.parseErrors = new Vector();
  61.       this.comments = new CommentList();
  62.    }
  63.  
  64.    public void setEncoding(String var1) {
  65.       this.encoding = var1;
  66.    }
  67.  
  68.    public String getEncoding() {
  69.       return this.encoding;
  70.    }
  71.  
  72.    public static boolean flavorExists(String var0) {
  73.       return var0 == null ? false : FlavorRegistry.getDefaultRegistry().flavorExists(var0);
  74.    }
  75.  
  76.    public String getFlavorName() {
  77.       return this.getFlavor().getFlavorName();
  78.    }
  79.  
  80.    public SchemaFlavorIntf getFlavor() {
  81.       return this.flavor;
  82.    }
  83.  
  84.    private void setFlavor(SchemaFlavorIntf var1) {
  85.       this.flavor = var1;
  86.       if (this.documentStructure != null) {
  87.          this.documentStructure.setName(this.getFlavorName());
  88.       }
  89.  
  90.    }
  91.  
  92.    public boolean setFlavor(String var1) {
  93.       SchemaFlavorIntf var2 = FlavorRegistry.getDefaultRegistry().createFlavor(this, var1);
  94.       if (var2 == null) {
  95.          return false;
  96.       } else {
  97.          this.setFlavor(var2);
  98.          return true;
  99.       }
  100.    }
  101.  
  102.    public void setSchemaPath(String var1) {
  103.       this.schemaPath = var1;
  104.    }
  105.  
  106.    public String getSchemaPath() {
  107.       return this.schemaPath;
  108.    }
  109.  
  110.    public Vector getSchemaPaths() {
  111.       if (this.schemaPath == null) {
  112.          return new Vector();
  113.       } else {
  114.          String var1 = System.getProperty("path.separator");
  115.          Vector var2 = StringUtilities.extract(this.schemaPath, var1);
  116.          return var2;
  117.       }
  118.    }
  119.  
  120.    public URI getURI() {
  121.       return this.baseURI;
  122.    }
  123.  
  124.    public URI getNamespace() {
  125.       return this.baseNamespace;
  126.    }
  127.  
  128.    public void setNamespace(URI var1) {
  129.       this.baseNamespace = var1;
  130.    }
  131.  
  132.    public String getSchemaPrefix() {
  133.       return this.schemaPrefix;
  134.    }
  135.  
  136.    public void setSchemaPrefix(String var1) {
  137.       this.schemaPrefix = var1;
  138.    }
  139.  
  140.    public void setModuleURIResolver(URIResolver var1) {
  141.       this.moduleResolver = var1;
  142.    }
  143.  
  144.    public URI resolveModuleURI(URI var1) {
  145.       return this.moduleResolver == null ? null : this.moduleResolver.resolve(var1);
  146.    }
  147.  
  148.    public void checkContentModel(String var1, String var2, boolean var3) throws ParserException {
  149.       this.getFlavor().checkContentModel(var1, var2, var3);
  150.    }
  151.  
  152.    public void updateContentModel(ContentModelOwner var1, String var2, boolean var3) throws ParserException {
  153.       this.getFlavor().updateContentModel(var1, var2, var3);
  154.    }
  155.  
  156.    public void checkAttributeGroup(String var1, String var2) throws ParserException {
  157.       this.getFlavor().checkAttributeGroup(var1, var2);
  158.    }
  159.  
  160.    public boolean updateAttributeGroup(AttributeDeclaration.Owner var1, String var2) throws ParserException {
  161.       Vector var3 = var1.getAttributeGroup().getMembers();
  162.       boolean var4 = this.getFlavor().updateAttributeGroup(var1, var2);
  163.       Enumeration var5 = var3.elements();
  164.  
  165.       while(var5.hasMoreElements()) {
  166.          Object var6 = var5.nextElement();
  167.          if (var6 instanceof AttributeDeclaration) {
  168.             this.removeDeclaration((AttributeDeclaration)var6);
  169.          }
  170.       }
  171.  
  172.       var5 = var1.getAttributeGroup().getAttributes(false);
  173.  
  174.       while(var5.hasMoreElements()) {
  175.          Object var8 = var5.nextElement();
  176.          if (var8 instanceof AttributeDeclaration) {
  177.             this.insertDeclaration((AttributeDeclaration)var8, (BaseDeclaration)null);
  178.          }
  179.       }
  180.  
  181.       return var4;
  182.    }
  183.  
  184.    public boolean createAttributeGroup(InternalPEDeclaration var1) throws ParserException {
  185.       if (var1.getAttributeGroup() == null) {
  186.          var1.setAttributes(new AttributeGroup(var1));
  187.       }
  188.  
  189.       return this.getFlavor().updateAttributeGroup(var1, ((EntityDeclaration)var1).getValue());
  190.    }
  191.  
  192.    private FirstNameHashtable getDeclHash(Object var1) {
  193.       if (var1 instanceof ElementDeclaration) {
  194.          return this.elements;
  195.       } else if (var1 instanceof NotationDeclaration) {
  196.          return this.notations;
  197.       } else if (var1 instanceof GeneralEntityDeclaration) {
  198.          return this.generalEntities;
  199.       } else if (var1 instanceof ParameterEntityDeclaration) {
  200.          return this.parameterEntities;
  201.       } else if (var1 instanceof NamespaceDeclaration) {
  202.          return this.namespaces;
  203.       } else {
  204.          return var1 instanceof DataTypeDeclaration ? this.datatypes : null;
  205.       }
  206.    }
  207.  
  208.    private int indexOfLastAttributeOf(AttributeDeclaration.Owner var1) {
  209.       if (var1 instanceof UnknownOwner) {
  210.          return this.declarations.size() - 1;
  211.       } else {
  212.          int var2;
  213.          for(var2 = this.declarations.indexOf(var1) + 1; var2 < this.declarations.size() && this.declarations.elementAt(var2) instanceof AttributeDeclaration && ((AttributeDeclaration)this.declarations.elementAt(var2)).getOwner() == var1; ++var2) {
  214.          }
  215.  
  216.          --var2;
  217.          return var2;
  218.       }
  219.    }
  220.  
  221.    public CommentList getCommentList(URI var1) {
  222.       if (var1.equals(this.getURI())) {
  223.          return this.comments;
  224.       } else {
  225.          ExternalSubset var2 = this.getStructure().findParent(var1);
  226.          Debug.assert(var2 != null, String.valueOf("unable to locate uri: ").concat(String.valueOf(var1.getFullName())));
  227.          return var2.getModuleComments();
  228.       }
  229.    }
  230.  
  231.    public void setComments(URI var1, Vector var2) {
  232.       if (var1 != null && !var1.equals(this.getURI())) {
  233.          ExternalSubset var3 = this.getStructure().findParent(var1);
  234.          Debug.assert(var3 != null, String.valueOf("unable to locate uri: ").concat(String.valueOf(var1.getFullName())));
  235.          var3.setModuleComments(var2);
  236.       } else if (this.comments == null) {
  237.          this.comments = new CommentList(var2);
  238.       } else {
  239.          this.comments.setComments(var2);
  240.       }
  241.  
  242.    }
  243.  
  244.    public void addComment(Comment var1) {
  245.       if (this.comments == null) {
  246.          this.comments = new CommentList();
  247.       }
  248.  
  249.       this.comments.addComment(var1);
  250.    }
  251.  
  252.    public Enumeration getComments() {
  253.       return this.comments.getComments();
  254.    }
  255.  
  256.    public void addError(ParserException var1) {
  257.       this.parseErrors.addElement(var1);
  258.    }
  259.  
  260.    public Vector getParseErrors() {
  261.       return this.parseErrors;
  262.    }
  263.  
  264.    public void clearAllParseErrors() {
  265.       this.parseErrors = new Vector();
  266.    }
  267.  
  268.    public void clearParseErrorsWithURI(URI var1) {
  269.       for(int var2 = this.parseErrors.size() - 1; var2 >= 0; --var2) {
  270.          URI var3 = ((ParserException)this.parseErrors.elementAt(var2)).getURI();
  271.          if (var3.equals(var1)) {
  272.             this.parseErrors.removeElementAt(var2);
  273.          }
  274.       }
  275.  
  276.    }
  277.  
  278.    public String expandPERefs(String var1, BaseDeclaration var2) {
  279.       StringBuffer var3 = new StringBuffer();
  280.  
  281.       for(int var4 = 0; var4 < var1.length(); ++var4) {
  282.          if (var1.charAt(var4) != '%') {
  283.             var3.append(var1.charAt(var4));
  284.          } else {
  285.             int var5;
  286.             for(var5 = var4 + 1; var5 < var1.length() && DTDParser.isNameChar(var1.charAt(var5)); ++var5) {
  287.             }
  288.  
  289.             String var6 = var1.substring(var4 + 1, var5);
  290.             ParameterEntityDeclaration var7 = this.getNamedParameterEntity(var6);
  291.             String var8 = var7 == null ? String.valueOf(String.valueOf('%').concat(String.valueOf(var6))).concat(String.valueOf(';')) : this.getNamedParameterEntity(var6).getValue();
  292.             var3.append(var8);
  293.             if (var5 < var1.length() && var1.charAt(var5) == ';') {
  294.                ++var5;
  295.             }
  296.  
  297.             var4 = var5--;
  298.          }
  299.       }
  300.  
  301.       return var3.toString();
  302.    }
  303.  
  304.    public Enumeration getIncludedModules(URI var1) {
  305.       return this.getStructure().findParent(var1).children();
  306.    }
  307.  
  308.    public Enumeration getForeignDeclarations(Class var1) {
  309.       Vector var2 = new Vector();
  310.       Enumeration var3 = this.getDeclarations(Class.forName("com.extensibility.xml.NamespaceDeclaration"));
  311.  
  312.       while(var3.hasMoreElements()) {
  313.          NamespaceDeclaration var4 = (NamespaceDeclaration)var3.nextElement();
  314.  
  315.          try {
  316.             Enumeration var5 = this.getNamedSchema(((BaseDeclaration)var4).getName()).getDeclarations(Class.forName("com.extensibility.xml.ElementDeclaration"));
  317.  
  318.             while(var5.hasMoreElements()) {
  319.                var2.addElement(var5.nextElement());
  320.             }
  321.          } catch (Exception var6) {
  322.          }
  323.       }
  324.  
  325.       return var2.elements();
  326.    }
  327.  
  328.    public Enumeration getElementDeclarations() {
  329.       return new FilteredEnumerator(this.getDeclarations(), Class.forName("com.extensibility.xml.ElementDeclaration"));
  330.    }
  331.  
  332.    public Enumeration getDeclarations() {
  333.       return this.declarations.elements();
  334.    }
  335.  
  336.    public Enumeration getDeclarations(Class var1) {
  337.       return new FilteredEnumerator(this.getDeclarations(), var1);
  338.    }
  339.  
  340.    public Enumeration getDeclarations(URI var1, Class var2) {
  341.       return new FilteredEnumerator(this.getDeclarations(), new 1(var1, var2, (Schema)null));
  342.    }
  343.  
  344.    public Enumeration getDeclarations(URI var1, boolean var2) {
  345.       return new FilteredEnumerator(this.getDeclarations(), new 2(var1, var2, this));
  346.    }
  347.  
  348.    public int getElementCount() {
  349.       return this.elements.size();
  350.    }
  351.  
  352.    public int getCount() {
  353.       return this.declarations.size();
  354.    }
  355.  
  356.    public String getContentModelAsString(ContentModelOwner var1) {
  357.       ContentModel var2 = var1.getContentModel();
  358.       return var2 == null ? "" : ((ContentModelTerm)var2).getSource(false);
  359.    }
  360.  
  361.    public ElementDeclaration[] getAllowedElements(ElementDeclaration var1) {
  362.       XASet var2 = new XASet();
  363.       this.getAllowedElements(var1.getEffectiveModel(), var2);
  364.       ElementDeclaration[] var3 = new ElementDeclaration[((Vector)var2).size()];
  365.  
  366.       for(int var4 = 0; var4 < var3.length; ++var4) {
  367.          var3[var4] = (ElementDeclaration)((Vector)var2).elementAt(var4);
  368.       }
  369.  
  370.       return var3;
  371.    }
  372.  
  373.    protected void getAllowedElements(ContentModelTerm var1, XASet var2) {
  374.       ContentModelTermEnum var3 = var1.getLeafTerms();
  375.  
  376.       while(var3.hasMoreElements()) {
  377.          ContentModelTerm var4 = var3.nextContentModelTerm();
  378.          CMTReferent var5 = var4.getReferent();
  379.          if (var5 instanceof ElementDeclaration) {
  380.             var2.addToSet(var5);
  381.          }
  382.       }
  383.  
  384.    }
  385.  
  386.    public BaseDeclaration getIndDeclaration(int var1) {
  387.       return (BaseDeclaration)this.declarations.elementAt(var1);
  388.    }
  389.  
  390.    public BaseDeclaration getDeclarationAfter(BaseDeclaration var1) {
  391.       int var2 = this.declarations.indexOf(var1);
  392.       if (var2 < this.declarations.size() - 1) {
  393.          return (BaseDeclaration)this.declarations.elementAt(var2 + 1);
  394.       } else if (var2 == this.declarations.size() - 1) {
  395.          return null;
  396.       } else {
  397.          Debug.assert(var2 >= 0, "The decl is not in Schema");
  398.          return null;
  399.       }
  400.    }
  401.  
  402.    public BaseDeclaration getDeclarationBefore(BaseDeclaration var1) {
  403.       int var2 = this.declarations.indexOf(var1);
  404.       if (var2 == 0) {
  405.          return null;
  406.       } else if (var2 > 0) {
  407.          return (BaseDeclaration)this.declarations.elementAt(var2 - 1);
  408.       } else {
  409.          Debug.assert(var2 >= 0, "The decl is not in Schema");
  410.          return null;
  411.       }
  412.    }
  413.  
  414.    public BaseDeclaration getNamedDeclaration(String var1, Class var2) {
  415.       if (var2 == Class.forName("com.extensibility.xml.ElementDeclaration")) {
  416.          return this.elements.get(var1);
  417.       } else if (var2 == Class.forName("com.extensibility.xml.NamespaceDeclaration")) {
  418.          return this.namespaces.get(var1);
  419.       } else if (var2 == Class.forName("com.extensibility.xml.DataTypeDeclaration")) {
  420.          return this.datatypes.get(var1);
  421.       } else if (var2 == Class.forName("com.extensibility.xml.ParameterEntityDeclaration")) {
  422.          return this.parameterEntities.get(var1);
  423.       } else if (var2 == Class.forName("com.extensibility.xml.InternalPEDeclaration")) {
  424.          ParameterEntityDeclaration var9 = (ParameterEntityDeclaration)this.parameterEntities.get(var1);
  425.          return var9 == null ? null : (((EntityDeclaration)var9).isInternal() ? var9 : null);
  426.       } else if (var2 == Class.forName("com.extensibility.xml.ExternalPEDeclaration")) {
  427.          ParameterEntityDeclaration var8 = (ParameterEntityDeclaration)this.parameterEntities.get(var1);
  428.          return var8 == null ? null : (((EntityDeclaration)var8).isInternal() ? null : var8);
  429.       } else if (var2 == Class.forName("com.extensibility.xml.GeneralEntityDeclaration")) {
  430.          return this.generalEntities.get(var1);
  431.       } else if (var2 == Class.forName("com.extensibility.xml.InternalGEDeclaration")) {
  432.          GeneralEntityDeclaration var7 = (GeneralEntityDeclaration)this.generalEntities.get(var1);
  433.          return var7 == null ? null : (((EntityDeclaration)var7).isInternal() ? var7 : null);
  434.       } else if (var2 == Class.forName("com.extensibility.xml.ExternalGEDeclaration")) {
  435.          GeneralEntityDeclaration var6 = (GeneralEntityDeclaration)this.generalEntities.get(var1);
  436.          return var6 == null ? null : (((EntityDeclaration)var6).isInternal() ? null : var6);
  437.       } else if (var2 == Class.forName("com.extensibility.xml.ExternalSubset")) {
  438.          return this.getStructure().findNamedChild(var1);
  439.       } else {
  440.          FilteredEnumerator var3 = new FilteredEnumerator(this.getDeclarations(), var2);
  441.          boolean var4 = false;
  442.  
  443.          while(var3.hasMoreElements()) {
  444.             BaseDeclaration var5 = (BaseDeclaration)var3.nextElement();
  445.             if (var2.isInstance(var5) && var5.getName().equals(var1)) {
  446.                return var5;
  447.             }
  448.          }
  449.  
  450.          return null;
  451.       }
  452.    }
  453.  
  454.    public ElementDeclaration getNamedElement(String var1) {
  455.       return (ElementDeclaration)this.elements.get(var1);
  456.    }
  457.  
  458.    public AttributeDeclaration getNamedAttribute(String var1, String var2) {
  459.       if (var1 == null) {
  460.          var1 = "";
  461.       }
  462.  
  463.       for(int var3 = 0; var3 < this.declarations.size(); ++var3) {
  464.          BaseDeclaration var4 = this.getIndDeclaration(var3);
  465.          if (var4 instanceof AttributeDeclaration) {
  466.             AttributeDeclaration var5 = (AttributeDeclaration)var4;
  467.             if (((BaseDeclaration)var5).getName().equals(var2) && var5.getOwner().getName().equals(var1)) {
  468.                return var5;
  469.             }
  470.          }
  471.       }
  472.  
  473.       return null;
  474.    }
  475.  
  476.    public NamespaceDeclaration getNamedNamespace(String var1) {
  477.       return (NamespaceDeclaration)this.namespaces.get(var1);
  478.    }
  479.  
  480.    public DataTypeDeclaration getNamedDataType(String var1) {
  481.       return (DataTypeDeclaration)this.datatypes.get(var1);
  482.    }
  483.  
  484.    public ParameterEntityDeclaration getNamedParameterEntity(String var1) {
  485.       return (ParameterEntityDeclaration)this.parameterEntities.get(var1);
  486.    }
  487.  
  488.    public GeneralEntityDeclaration getNamedGeneralEntity(String var1) {
  489.       return (GeneralEntityDeclaration)this.generalEntities.get(var1);
  490.    }
  491.  
  492.    public ContentModelOwner getNamedContentModelOwner(String var1) {
  493.       ElementDeclaration var2 = this.getNamedElement(var1);
  494.       if (var2 != null) {
  495.          return var2;
  496.       } else {
  497.          var1 = DTDUtilities.convertPEName(var1, false);
  498.          ParameterEntityDeclaration var3 = this.getNamedParameterEntity(var1);
  499.          return var3 != null && var3.getContentModel() != null ? (InternalPEDeclaration)var3 : null;
  500.       }
  501.    }
  502.  
  503.    BaseDeclaration getIndDecl(int var1) {
  504.       return var1 == this.declarations.size() ? null : (BaseDeclaration)this.declarations.elementAt(var1);
  505.    }
  506.  
  507.    public BaseDeclaration getNextDeclaration(BaseDeclaration var1) {
  508.       return this.getIndDecl(this.declarations.indexOf(var1) + 1);
  509.    }
  510.  
  511.    public ExternalSubset getStructure() {
  512.       return this.documentStructure;
  513.    }
  514.  
  515.    public void setStructure(ExternalSubset var1) {
  516.       this.documentStructure = var1;
  517.    }
  518.  
  519.    public void parse(URI var1, int var2, Object var3) throws IOException {
  520.       this.getFlavor().parse(var1, var1, var2, var3);
  521.    }
  522.  
  523.    public void parse(URI var1, URI var2, int var3, Object var4) throws IOException {
  524.       this.getFlavor().parse(var1, var2, var3, var4);
  525.    }
  526.  
  527.    public ElementDeclaration getRoot(boolean var1) {
  528.       if (!var1) {
  529.          return null;
  530.       } else {
  531.          Enumeration var2 = this.getDeclarations(Class.forName("com.extensibility.xml.ElementDeclaration"));
  532.          return var2.hasMoreElements() ? this.findParent((ElementDeclaration)var2.nextElement()) : null;
  533.       }
  534.    }
  535.  
  536.    protected ElementDeclaration findParent(ElementDeclaration var1) {
  537.       return var1;
  538.    }
  539.  
  540.    public void removeAllDeclarations() {
  541.       this.init(this.getFlavor().getFlavorName());
  542.    }
  543.  
  544.    public void moveDeclaration(BaseDeclaration var1, BaseDeclaration var2) {
  545.       FirstNameHashtable var3 = this.getDeclHash(var1);
  546.       BaseDeclaration var4 = var3 == null ? null : var3.get(var1.getName());
  547.       int var5 = this.getInsertPosition(var1, var2);
  548.       int var6 = this.declarations.indexOf(var1);
  549.       if (!this.checkPositionForURI(var1.getURI(), var5)) {
  550.          throw new IllegalArgumentException(String.valueOf("checkPosition failed with moveTo = ").concat(String.valueOf(var5)));
  551.       } else {
  552.          int var7 = 1;
  553.  
  554.          for(int var8 = 0; var8 < this.declarations.size() && var1.isSubordinate(this.getIndDecl(var8)); ++var8) {
  555.             ++var7;
  556.          }
  557.  
  558.          BaseDeclaration[] var9 = new BaseDeclaration[var7];
  559.  
  560.          for(int var10 = var6; var10 < var6 + var7; ++var10) {
  561.             var9[var10 - var6] = this.getIndDecl(var10);
  562.          }
  563.  
  564.          if (var6 < var5) {
  565.             for(int var11 = var6 + var7; var11 <= var5; ++var11) {
  566.                this.declarations.setElementAt(this.getIndDecl(var11), var11 - var7);
  567.             }
  568.  
  569.             var5 -= var7;
  570.          } else if (var6 > var5) {
  571.             for(int var13 = var6 - 1; var13 >= var5; --var13) {
  572.                this.declarations.setElementAt(this.getIndDecl(var13), var13 + var7);
  573.             }
  574.          }
  575.  
  576.          for(int var14 = var5; var14 < var5 + var7; ++var14) {
  577.             this.declarations.setElementAt(var9[var14 - var5], var14);
  578.          }
  579.  
  580.          if (var3 != null) {
  581.             var3.remove(var1);
  582.             var3.put(var1);
  583.             BaseDeclaration var12 = var3.get(var1.getName());
  584.             if (var12 != var4) {
  585.                this.updateReferences(var4, var12);
  586.             }
  587.          }
  588.  
  589.       }
  590.    }
  591.  
  592.    public void insertDeclaration(AttributeDeclaration var1, BaseDeclaration var2, AttributeDeclaration.Owner var3) {
  593.       if (var3 == null) {
  594.          var3 = this.unknownOwnerList.createUnknownOwner("");
  595.          var3.add(var1);
  596.       }
  597.  
  598.       var1.setOwner(var3);
  599.       this.insertDeclaration(var1, var2);
  600.    }
  601.  
  602.    public void insertDeclaration(BaseDeclaration var1, BaseDeclaration var2, String var3) {
  603.       var1.setName(var3);
  604.       this.insertDeclaration(var1, var2);
  605.    }
  606.  
  607.    public void setDeclarationOwner(AttributeDeclaration var1, String var2) {
  608.       AttributeDeclaration.Owner var3 = this.unknownOwnerList.createUnknownOwner(var2);
  609.       this.setDeclarationOwner(var1, var3);
  610.    }
  611.  
  612.    public void setDeclarationOwner(AttributeDeclaration var1, AttributeDeclaration.Owner var2) {
  613.       boolean var3 = false;
  614.       AttributeDeclaration.Owner var4 = var1.getOwner();
  615.       Debug.assert(var2 != null, "new owner may not be null");
  616.       if (var4 != var2) {
  617.          if (var4 != null) {
  618.             this.removeDeclaration(var1);
  619.          }
  620.  
  621.          var1.setOwner(var2);
  622.          var2.add(var1);
  623.          this.insertDeclaration(var1, (BaseDeclaration)null);
  624.       }
  625.    }
  626.  
  627.    public void setDeclarationName(BaseDeclaration var1, String var2, boolean var3) {
  628.       String var4 = var1.getName();
  629.       if (!var4.equals(var2)) {
  630.          FirstNameHashtable var5 = this.getDeclHash(var1);
  631.          if (var5 != null) {
  632.             var5.remove(var1);
  633.          }
  634.  
  635.          var1.setName(var2);
  636.          if (var5 != null) {
  637.             var5.put(var1);
  638.          }
  639.  
  640.          if (var1 instanceof ExternalPEDeclaration) {
  641.             ExternalSubset var6 = (ExternalSubset)this.getNamedDeclaration(var4, Class.forName("com.extensibility.xml.ExternalSubset"));
  642.             if (var6 != null) {
  643.                this.setDeclarationName(var6, var2, var3);
  644.             }
  645.          }
  646.  
  647.          if (var1 instanceof NamespaceDeclaration) {
  648.             Vector var11 = this.prefixRegistry.getVector(var4);
  649.  
  650.             for(int var7 = 0; var7 < var11.size(); ++var7) {
  651.                ((DeclRef)var11.elementAt(var7)).setPrefix(var2);
  652.             }
  653.  
  654.             this.prefixRegistry.remove(var4);
  655.             this.prefixRegistry.put(var2, var11);
  656.             Object var8 = this.nsSchemas.get(var4);
  657.             if (var8 != null) {
  658.                this.nsSchemas.remove(var4);
  659.                this.nsSchemas.put(var2, var8);
  660.             }
  661.          }
  662.  
  663.          if (var3 && var1 instanceof DataTypeDeclaration) {
  664.             DeclRef var12 = new DeclRef(var4, var1.getClass());
  665.             Vector var15 = this.refRegistry.getVector(var12);
  666.             if (var15.size() > 0) {
  667.                this.refRegistry.remove(var12);
  668.             }
  669.  
  670.             for(int var18 = 0; var18 < var15.size(); ++var18) {
  671.                ((DeclRef)var15.elementAt(var18)).setName(var2);
  672.             }
  673.  
  674.             if (var15.size() > 0) {
  675.                Object var9 = var15.firstElement();
  676.                this.refRegistry.put(var9, var15);
  677.             }
  678.          }
  679.  
  680.          if (var3 && var1 instanceof ElementDeclaration) {
  681.             DeclRef var13 = new DeclRef(var4, var1.getClass());
  682.             Vector var16 = this.refRegistry.getVector(var13);
  683.             if (var16.size() > 0) {
  684.                this.refRegistry.remove(var13);
  685.             }
  686.  
  687.             for(int var19 = 0; var19 < var16.size(); ++var19) {
  688.                ((DeclRef)var16.elementAt(var19)).setName(var2);
  689.             }
  690.  
  691.             if (var16.size() > 0) {
  692.                Object var20 = var16.firstElement();
  693.                this.refRegistry.put(var20, var16);
  694.             }
  695.  
  696.             TypeRef var14 = new TypeRef(var4);
  697.             var16 = this.refRegistry.getVector(var14);
  698.             if (var16.size() > 0) {
  699.                this.refRegistry.remove(var14);
  700.             }
  701.  
  702.             for(int var21 = 0; var21 < var16.size(); ++var21) {
  703.                ((DeclRef)var16.elementAt(var21)).setName(var2);
  704.             }
  705.  
  706.             if (var16.size() > 0) {
  707.                Object var10 = var16.firstElement();
  708.                this.refRegistry.put(var10, var16);
  709.             }
  710.  
  711.             this.claimAttributes((ElementDeclaration)var1);
  712.          }
  713.  
  714.          if (var1 instanceof InternalPEDeclaration) {
  715.             this.claimModelAndAttrGroups((InternalPEDeclaration)var1);
  716.          }
  717.  
  718.       }
  719.    }
  720.  
  721.    protected void unclaimModelAndAttrGroups(InternalPEDeclaration var1) {
  722.       InternalPEDeclaration var2 = (InternalPEDeclaration)this.getNamedDeclaration(((BaseDeclaration)var1).getName(), Class.forName("com.extensibility.xml.InternalPEDeclaration"));
  723.       boolean var3 = var2 == null;
  724.       if (var1.getContentModel() != null) {
  725.          Object var4;
  726.          if (var2 == null) {
  727.             var4 = new ContentModelTerm(new TypeRef(String.valueOf('%').concat(String.valueOf(((BaseDeclaration)var1).getName()))));
  728.          } else {
  729.             var4 = var2.getContentModel();
  730.          }
  731.  
  732.          ContentModel var5 = var1.getContentModel();
  733.          Enumeration var6 = this.getDeclarations();
  734.  
  735.          while(var6.hasMoreElements()) {
  736.             Object var7 = var6.nextElement();
  737.             if (var7 instanceof ContentModelOwner) {
  738.                ContentModelOwner var8 = (ContentModelOwner)var7;
  739.                if (var8.getContentModel() != null && var8.getContentModel().replace(var1, (ContentModelTerm)var4) && var3) {
  740.                   this.unknownModelGroups.add(((BaseDeclaration)var1).getName(), (BaseDeclaration)var7);
  741.                }
  742.             }
  743.          }
  744.       } else if (var1.getAttributeGroup() != null) {
  745.          AttributeGroup var9 = var1.getAttributeGroup();
  746.          AttributeGroup var10;
  747.          if (var2 == null) {
  748.             var10 = new AttributeGroup(new UnknownOwner((Schema)null, String.valueOf('%').concat(String.valueOf(((BaseDeclaration)var1).getName()))));
  749.          } else {
  750.             var10 = var2.getAttributeGroup();
  751.          }
  752.  
  753.          Enumeration var11 = this.getDeclarations();
  754.  
  755.          while(var11.hasMoreElements()) {
  756.             Object var12 = var11.nextElement();
  757.             if (var12 instanceof AttributeDeclaration.Owner) {
  758.                AttributeDeclaration.Owner var13 = (AttributeDeclaration.Owner)var12;
  759.                if (var13.getAttributeGroup() != null && var13.getAttributeGroup().replace(var1, var10) && var3) {
  760.                   this.unknownAttrGroups.add(((BaseDeclaration)var1).getName(), (BaseDeclaration)var12);
  761.                }
  762.             }
  763.          }
  764.       }
  765.  
  766.    }
  767.  
  768.    protected void unclaimAttributes(ElementDeclaration var1) {
  769.    }
  770.  
  771.    protected void claimAttributes(ElementDeclaration var1) {
  772.       Enumeration var2 = this.unknownOwnerList.getList();
  773.       Vector var3 = new Vector();
  774.  
  775.       while(var2.hasMoreElements()) {
  776.          UnknownOwner var4 = (UnknownOwner)var2.nextElement();
  777.          AttributeGroupMember var5 = var4.getMember();
  778.          if (var4.getName().equals(((BaseDeclaration)var1).getName())) {
  779.             if (var5 instanceof AttributeDeclaration) {
  780.                this.setDeclarationOwner((AttributeDeclaration)var5, (AttributeDeclaration.Owner)var1);
  781.             } else {
  782.                var1.add(var5);
  783.             }
  784.  
  785.             var3.addElement(var4);
  786.          }
  787.       }
  788.  
  789.       for(int var6 = 0; var6 < var3.size(); ++var6) {
  790.          this.unknownOwnerList.remove((UnknownOwner)var3.elementAt(var6));
  791.       }
  792.  
  793.    }
  794.  
  795.    protected void createModelGroup(InternalPEDeclaration var1) throws ParserException {
  796.       if (var1.getContentModel() == null) {
  797.          var1.createContentModel();
  798.       }
  799.  
  800.       String var2 = ((EntityDeclaration)var1).getValue().trim();
  801.       boolean var3 = var2.equals("ANY") || var2.equals("EMPTY");
  802.       this.updateContentModel(var1, var2, var3);
  803.    }
  804.  
  805.    protected void claimModelAndAttrGroups(InternalPEDeclaration var1) {
  806.       Enumeration var2 = this.unknownModelGroups.get(((BaseDeclaration)var1).getName()).elements();
  807.       if (var2.hasMoreElements() && var1.getContentModel() == null) {
  808.          try {
  809.             this.createModelGroup(var1);
  810.          } catch (ParserException var5) {
  811.             return;
  812.          }
  813.       }
  814.  
  815.       while(var2.hasMoreElements()) {
  816.          this.claimModelGroup(var1, ((ContentModelOwner)var2.nextElement()).getContentModel());
  817.       }
  818.  
  819.       this.unknownModelGroups.remove(((BaseDeclaration)var1).getName());
  820.       var2 = this.unknownAttrGroups.get(((BaseDeclaration)var1).getName()).elements();
  821.       if (var2.hasMoreElements() && var1.getAttributeGroup() == null) {
  822.          try {
  823.             this.createAttributeGroup(var1);
  824.          } catch (ParserException var4) {
  825.             return;
  826.          }
  827.       }
  828.  
  829.       while(var2.hasMoreElements()) {
  830.          this.claimAttrGroup(var1, ((AttributeDeclaration.Owner)var2.nextElement()).getAttributeGroup());
  831.       }
  832.  
  833.       this.unknownAttrGroups.remove(((BaseDeclaration)var1).getName());
  834.    }
  835.  
  836.    private void claimAttrGroup(InternalPEDeclaration var1, AttributeGroup var2) {
  837.       if (var2 != null) {
  838.          String var3 = String.valueOf('%').concat(String.valueOf(((BaseDeclaration)var1).getName()));
  839.          Enumeration var4 = var2.getAttributes(false);
  840.  
  841.          while(var4.hasMoreElements()) {
  842.             AttributeGroupMember var5 = (AttributeGroupMember)var4.nextElement();
  843.             if (var5.getName().equals(var3)) {
  844.                var2.replace(var5, var1.getAttributeGroup());
  845.             } else if (var5 instanceof AttributeGroup) {
  846.                this.claimAttrGroup(var1, (AttributeGroup)var5);
  847.             }
  848.          }
  849.  
  850.       }
  851.    }
  852.  
  853.    private void claimModelGroup(InternalPEDeclaration var1, ContentModel var2) {
  854.       if (var2 != null) {
  855.          String var3 = String.valueOf('%').concat(String.valueOf(((BaseDeclaration)var1).getName()));
  856.          var2.visitTerms(new 3(var3, var1, (Schema)null), false);
  857.       }
  858.    }
  859.  
  860.    private URI getBaseURI() {
  861.       return this.baseURI;
  862.    }
  863.  
  864.    public AttributeDeclaration.Owner createUnknownOwner(String var1) {
  865.       return this.unknownOwnerList.createUnknownOwner(var1);
  866.    }
  867.  
  868.    private int indexAfterFirstBlock(URI var1, Class var2) {
  869.       boolean var3 = false;
  870.       int var4 = -1;
  871.  
  872.       for(int var5 = 0; var5 < this.declarations.size(); ++var5) {
  873.          BaseDeclaration var6 = (BaseDeclaration)this.declarations.elementAt(var5);
  874.          URI var7 = var6.getURI();
  875.          if (var6 instanceof ExternalSubset) {
  876.             var7 = ((ExternalSubset)var6).getSystemURI();
  877.          }
  878.  
  879.          if (var1.equals(var7)) {
  880.             var4 = var5;
  881.             if (var2.isInstance(var6)) {
  882.                var3 = true;
  883.             } else if (var3) {
  884.                return var5;
  885.             }
  886.          }
  887.       }
  888.  
  889.       return var4 + 1;
  890.    }
  891.  
  892.    public URI getSchemaLoc(NamespaceDeclaration var1) {
  893.       URI var2 = this.getFlavor().getSchemaLoc(var1);
  894.       var2 = var2 == null ? null : new URI(this.getURI(), var2.toSource());
  895.       return var2;
  896.    }
  897.  
  898.    public SchemaIntf getNamedSchema(String var1) throws Exception {
  899.       SchemaIntf var2 = (SchemaIntf)this.nsSchemas.get(var1);
  900.       if (var2 != null) {
  901.          return var2;
  902.       } else {
  903.          NamespaceDeclaration var3 = this.getNamedNamespace(var1);
  904.          if (var3 == null) {
  905.             return null;
  906.          } else {
  907.             URI var4 = this.getSchemaLoc(var3);
  908.             if (var4 == null) {
  909.                return null;
  910.             } else {
  911.                var4 = this.flavor.resolveLogical(var4, true);
  912.                String var5 = SchemaUtilities.flavorConvertsTo(this.getFlavorName());
  913.                if (var5 != null && var5.equals("xsd")) {
  914.                   String var6 = SchemaUtilities.getFlavor(var4, true);
  915.                   if (var6 == null) {
  916.                      URI var7 = URI.makeStringURI("");
  917.                      var2 = new Schema(var4, this.getFlavorName());
  918.                      var2.parse(var7, var2.getCount(), (Object)null);
  919.                      var2.setFlavor(var5);
  920.                      this.nsSchemas.put(var1, var2);
  921.                      return var2;
  922.                   }
  923.  
  924.                   if (!var6.equals(var5)) {
  925.                      var2 = new Schema(var4, var6);
  926.                      var2.parse(var4, var2.getCount(), (Object)null);
  927.                      var2.setFlavor(var5);
  928.                      this.nsSchemas.put(var1, var2);
  929.                      return var2;
  930.                   }
  931.                }
  932.  
  933.                var2 = new Schema(var4, this.getFlavorName());
  934.                var2.parse(var4, var2.getCount(), (Object)null);
  935.                this.nsSchemas.put(var1, var2);
  936.                return var2;
  937.             }
  938.          }
  939.       }
  940.    }
  941.  
  942.    private int indexParameterEntityBlock(URI var1, URI var2) {
  943.       Class var3 = Class.forName("com.extensibility.xml.ParameterEntityDeclaration");
  944.       int var4 = -1;
  945.       int var5 = -1;
  946.       int var6 = -1;
  947.       int var7 = -1;
  948.  
  949.       for(int var8 = 0; var8 < this.declarations.size(); ++var8) {
  950.          BaseDeclaration var9 = (BaseDeclaration)this.declarations.elementAt(var8);
  951.          if (!var9.getURI().equals(var1)) {
  952.             if (var9 instanceof ExternalSubset) {
  953.                ExternalSubset var10 = (ExternalSubset)var9;
  954.                if (var10.getSystemURI().equals(var1)) {
  955.                   var4 = var8 + 1;
  956.                }
  957.             }
  958.          } else {
  959.             var7 = var8;
  960.             if (var2 == null || !(var9 instanceof ParameterEntityDeclaration) || !var2.equals(((ParameterEntityDeclaration)var9).getSystemID())) {
  961.                if (var5 == -1 && var9 instanceof ParameterEntityDeclaration) {
  962.                   var5 = var8;
  963.                }
  964.  
  965.                if (var2 != null && var9 instanceof ExternalSubset && var2.equals(((ExternalSubset)var9).getSystemURI())) {
  966.                   var6 = var8;
  967.                }
  968.             }
  969.          }
  970.       }
  971.  
  972.       if (var6 > -1) {
  973.          return var6;
  974.       } else if (var5 > -1) {
  975.          return var5;
  976.       } else if (var4 > -1) {
  977.          return var4;
  978.       } else {
  979.          return var7 + 1;
  980.       }
  981.    }
  982.  
  983.    private int getFirstIndex(URI var1) {
  984.       if (var1.equals(this.getURI())) {
  985.          return 0;
  986.       } else {
  987.          for(int var2 = 0; var2 < this.getCount(); ++var2) {
  988.             BaseDeclaration var3 = this.getIndDeclaration(var2);
  989.             if (var3 instanceof ExternalSubset && ((ExternalSubset)var3).getSystemURI().equals(var1)) {
  990.                return var2 + 1;
  991.             }
  992.          }
  993.  
  994.          return -1;
  995.       }
  996.    }
  997.  
  998.    private int getLastIndex(URI var1, BaseDeclaration var2, int var3) {
  999.       if (var3 == 0 && var1.equals(this.getURI())) {
  1000.          return this.getCount() - 1;
  1001.       } else {
  1002.          int var4 = -1;
  1003.  
  1004.          for(int var5 = var3; var5 < this.getCount(); ++var5) {
  1005.             BaseDeclaration var6 = this.getIndDeclaration(var5);
  1006.             if (var6.getURI().equals(var1) && var6 != var2) {
  1007.                if (var6 instanceof ExternalSubset) {
  1008.                   var5 = this.getLastIndex(((ExternalSubset)var6).getSystemURI(), (BaseDeclaration)null, var5);
  1009.                }
  1010.  
  1011.                var4 = var5;
  1012.             } else if (var6 instanceof ExternalSubset && ((ExternalSubset)var6).getSystemURI().equals(var1)) {
  1013.                var4 = var5;
  1014.             } else if (var4 >= 0) {
  1015.                return var4;
  1016.             }
  1017.          }
  1018.  
  1019.          return var4;
  1020.       }
  1021.    }
  1022.  
  1023.    public boolean isValidPosition(BaseDeclaration var1, BaseDeclaration var2) {
  1024.       try {
  1025.          this.getInsertPosition(var1, var2);
  1026.          boolean var3 = true;
  1027.          return var3;
  1028.       } catch (IllegalArgumentException var5) {
  1029.          boolean var4 = false;
  1030.          return var4;
  1031.       }
  1032.    }
  1033.  
  1034.    private int getInsertPosition(BaseDeclaration var1, BaseDeclaration var2) {
  1035.       if (var1.getURI() == null) {
  1036.          var1.setURI(this.baseURI);
  1037.       }
  1038.  
  1039.       URI var4 = var1.getURI();
  1040.       int var3;
  1041.       if (var2 == null) {
  1042.          if (var1 instanceof AttributeDeclaration) {
  1043.             AttributeDeclaration var5 = (AttributeDeclaration)var1;
  1044.             if (var5.getOwner() != null && !(var5.getOwner() instanceof UnknownOwner) && var4.equals(var5.getOwner().getURI())) {
  1045.                var3 = this.indexOfLastAttributeOf(var5.getOwner()) + 1;
  1046.             } else {
  1047.                var3 = this.getLastIndex(var4, var1, 0) + 1;
  1048.             }
  1049.          } else if (var1 instanceof GeneralEntityDeclaration) {
  1050.             var3 = this.indexAfterFirstBlock(var4, Class.forName("com.extensibility.xml.GeneralEntityDeclaration"));
  1051.          } else if (var1 instanceof NamespaceDeclaration) {
  1052.             var3 = this.indexAfterFirstBlock(var4, Class.forName("com.extensibility.xml.NamespaceDeclaration"));
  1053.          } else if (var1 instanceof DataTypeDeclaration) {
  1054.             var3 = this.indexAfterFirstBlock(var4, Class.forName("com.extensibility.xml.DataTypeDeclaration"));
  1055.          } else if (var1 instanceof ParameterEntityDeclaration) {
  1056.             var3 = this.indexParameterEntityBlock(var4, ((ParameterEntityDeclaration)var1).getSystemID());
  1057.             if (var3 == 0) {
  1058.                int var9 = this.indexAfterFirstBlock(var4, Class.forName("com.extensibility.xml.GeneralEntityDeclaration"));
  1059.                if (var9 > 0) {
  1060.                   var3 = var9;
  1061.                }
  1062.             }
  1063.          } else if (var1 instanceof NotationDeclaration) {
  1064.             var3 = this.indexAfterFirstBlock(var4, Class.forName("com.extensibility.xml.NotationDeclaration"));
  1065.          } else if (var1 instanceof ProcessingInstruction) {
  1066.             var3 = this.getFirstIndex(var4);
  1067.          } else if (var1 instanceof ExternalSubset) {
  1068.             ExternalSubset var10 = (ExternalSubset)var1;
  1069.             BaseDeclaration var6 = this.getNamedDeclaration(((BaseDeclaration)var10).getName(), Class.forName("com.extensibility.xml.ExternalPEDeclaration"));
  1070.             if (var6.getURI().equals(var4)) {
  1071.                var3 = this.declarations.indexOf(var6) + 1;
  1072.             } else {
  1073.                var3 = this.getFirstIndex(var4);
  1074.  
  1075.                for(int var7 = this.getCount() - 1; var7 > 0; --var7) {
  1076.                   BaseDeclaration var8 = this.getIndDeclaration(var7);
  1077.                   if (var8 instanceof ExternalPEDeclaration && var8.getName().equals(((BaseDeclaration)var10).getName()) && var8.getURI().equals(var4)) {
  1078.                      var3 = var7 + 1;
  1079.                   }
  1080.                }
  1081.             }
  1082.          } else {
  1083.             var3 = this.getLastIndex(var4, var1, 0) + 1;
  1084.          }
  1085.       } else {
  1086.          var3 = this.declarations.indexOf(var2);
  1087.          if (var3 == -1) {
  1088.             var3 = this.getLastIndex(var4, var1, 0) + 1;
  1089.          }
  1090.       }
  1091.  
  1092.       if (!this.checkPositionForURI(var4, var3)) {
  1093.          throw new IllegalArgumentException();
  1094.       } else {
  1095.          return var3;
  1096.       }
  1097.    }
  1098.  
  1099.    private boolean checkPositionForURI(URI var1, int var2) {
  1100.       return true;
  1101.    }
  1102.  
  1103.    public int insertSubset(ExternalPEDeclaration var1) throws IOException {
  1104.       return this.getFlavor().insertSubset(var1);
  1105.    }
  1106.  
  1107.    public void removeSubset(ExternalSubset var1) {
  1108.       this.removeSubset(var1, new Vector());
  1109.    }
  1110.  
  1111.    private void removeSubset(ExternalSubset var1, Vector var2) {
  1112.       URI var3 = var1.getSystemURI();
  1113.       var1.removeFromParent();
  1114.       this.removeDeclaration(var1);
  1115.       if (!var2.contains(var3)) {
  1116.          var2.addElement(var3);
  1117.  
  1118.          for(int var4 = this.declarations.size() - 1; var4 >= 0; --var4) {
  1119.             BaseDeclaration var5 = (BaseDeclaration)this.declarations.elementAt(var4);
  1120.             if (var5.getURI().equals(var3)) {
  1121.                Debug.assert(var1 != var5, "Removing subset itself!");
  1122.                if (var5 instanceof ExternalSubset) {
  1123.                   if (!((ExternalSubset)var5).getSystemURI().equals(this.getURI())) {
  1124.                      this.removeSubset((ExternalSubset)var5, var2);
  1125.                   } else {
  1126.                      ((ExternalSubset)var5).removeFromParent();
  1127.                      this.removeDeclaration(var5);
  1128.                   }
  1129.                } else {
  1130.                   this.removeDeclaration(var5);
  1131.                }
  1132.  
  1133.                if (var4 > this.declarations.size()) {
  1134.                   var4 = this.declarations.size();
  1135.                }
  1136.             }
  1137.          }
  1138.  
  1139.          if (this.isSupported("GESTALT_MULTI_INSTANCE_MODULES")) {
  1140.             ExternalSubset var8 = this.getStructure().findParent(var1.getSystemURI());
  1141.             if (var8 != null) {
  1142.                try {
  1143.                   URI var6 = this.getFlavor().resolveLogical(var8.getSystemURI(), false);
  1144.                   this.getFlavor().parse(var6, var8.getSystemURI(), this.indexOf(var8) + 1, Boolean.FALSE);
  1145.                } catch (IOException var7) {
  1146.                }
  1147.             }
  1148.          }
  1149.       }
  1150.  
  1151.    }
  1152.  
  1153.    public void insertDeclaration(BaseDeclaration var1, BaseDeclaration var2) {
  1154.       if (var1.getURI() == null) {
  1155.          var1.setURI(this.baseURI);
  1156.       }
  1157.  
  1158.       int var3 = this.getInsertPosition(var1, var2);
  1159.       this.insertDeclaration(var1, var3);
  1160.    }
  1161.  
  1162.    public void updateURI(URI var1, URI var2) {
  1163.       if (var1.equals(this.getURI())) {
  1164.          this.baseURI = var2;
  1165.       }
  1166.  
  1167.       Enumeration var3 = this.getDeclarations(var1, false);
  1168.  
  1169.       while(var3.hasMoreElements()) {
  1170.          BaseDeclaration var4 = (BaseDeclaration)var3.nextElement();
  1171.          var4.setURI(var2);
  1172.       }
  1173.  
  1174.       this.getStructure().updateSystemURIAsNeeded(var1, var2);
  1175.    }
  1176.  
  1177.    public int insertDeclaration(BaseDeclaration var1, int var2) {
  1178.       if (var2 - 1 > 0 && var2 < this.declarations.size() && this.declarations.elementAt(var2) instanceof ExternalSubset && this.declarations.elementAt(var2 - 1) instanceof ExternalPEDeclaration && !this.isSupported(Class.forName("com.extensibility.xml.ExternalPEDeclaration"))) {
  1179.          --var2;
  1180.       }
  1181.  
  1182.       int var3 = var2 + 1;
  1183.       FirstNameHashtable var4 = this.getDeclHash(var1);
  1184.       BaseDeclaration var5 = var4 == null ? null : var4.get(var1.getName());
  1185.       if (var2 >= this.declarations.size()) {
  1186.          this.declarations.addElement(var1);
  1187.          var3 = this.declarations.size();
  1188.       } else {
  1189.          this.declarations.insertElementAt(var1, var2);
  1190.       }
  1191.  
  1192.       var1.setSchema(this);
  1193.       if (var1 instanceof AttributeDeclaration) {
  1194.          AttributeDeclaration var6 = (AttributeDeclaration)var1;
  1195.          if (var6.getOwner() == null) {
  1196.             var6.setOwner(this.unknownOwnerList.createUnknownOwner(""));
  1197.          }
  1198.  
  1199.          var6.getOwner().add(var6);
  1200.       } else if (var1 instanceof ElementDeclaration) {
  1201.          this.claimAttributes((ElementDeclaration)var1);
  1202.       } else if (var1 instanceof InternalPEDeclaration) {
  1203.          this.claimModelAndAttrGroups((InternalPEDeclaration)var1);
  1204.  
  1205.          int var8;
  1206.          for(var8 = this.indexOf(var1) + 1; var8 < this.getCount(); ++var8) {
  1207.             Object var7 = this.declarations.elementAt(var8);
  1208.             if (!(var7 instanceof AttributeDeclaration) || ((AttributeDeclaration)var7).getOwner() != var1) {
  1209.                break;
  1210.             }
  1211.          }
  1212.  
  1213.          var3 = var8;
  1214.       }
  1215.  
  1216.       if (var1 instanceof AttributeDeclaration.Owner) {
  1217.          Enumeration var9 = ((AttributeDeclaration.Owner)var1).getOwnedAttributes();
  1218.  
  1219.          while(var9.hasMoreElements()) {
  1220.             AttributeDeclaration var11 = (AttributeDeclaration)var9.nextElement();
  1221.             if (this.declarations.indexOf(var11) == -1) {
  1222.                this.insertDeclaration(var11, (BaseDeclaration)null);
  1223.                var3 = Math.max(var3, this.declarations.indexOf(var11) + 1);
  1224.             }
  1225.          }
  1226.       }
  1227.  
  1228.       FirstNameHashtable var10 = this.getDeclHash(var1);
  1229.       if (var10 != null) {
  1230.          var10.put(var1);
  1231.          if (var10.get(var1.getName()) != var5) {
  1232.             this.updateReferences(var5, var1);
  1233.          }
  1234.       }
  1235.  
  1236.       return var3;
  1237.    }
  1238.  
  1239.    protected void updateReferences(BaseDeclaration var1, BaseDeclaration var2) {
  1240.       if (var1 instanceof InternalPEDeclaration) {
  1241.          InternalPEDeclaration var3 = (InternalPEDeclaration)var1;
  1242.          InternalPEDeclaration var4 = (InternalPEDeclaration)var2;
  1243.          if (var3.getAttributeGroup() != null) {
  1244.             try {
  1245.                if (var4.getAttributeGroup() == null) {
  1246.                   this.createAttributeGroup(var4);
  1247.                }
  1248.  
  1249.                Enumeration var5 = this.getDeclarations();
  1250.  
  1251.                while(var5.hasMoreElements()) {
  1252.                   Object var6 = var5.nextElement();
  1253.                   if (var6 instanceof AttributeDeclaration.Owner) {
  1254.                      this.updateAttrGroupRef(((AttributeDeclaration.Owner)var6).getAttributeGroup(), var3.getAttributeGroup(), var4.getAttributeGroup());
  1255.                   }
  1256.                }
  1257.             } catch (ParserException var8) {
  1258.             }
  1259.          }
  1260.  
  1261.          if (var3.getContentModel() != null) {
  1262.             try {
  1263.                if (var4.getContentModel() == null) {
  1264.                   this.createModelGroup(var4);
  1265.                }
  1266.  
  1267.                Enumeration var9 = this.getDeclarations();
  1268.  
  1269.                while(var9.hasMoreElements()) {
  1270.                   Object var10 = var9.nextElement();
  1271.                   if (var10 instanceof ContentModelOwner) {
  1272.                      this.updateModelGroupRef(((ContentModelOwner)var10).getContentModel(), var3.getContentModel(), var4.getContentModel());
  1273.                   }
  1274.                }
  1275.             } catch (ParserException var7) {
  1276.             }
  1277.          }
  1278.  
  1279.       }
  1280.    }
  1281.  
  1282.    protected void updateAttrGroupRef(AttributeGroup var1, AttributeGroup var2, AttributeGroup var3) {
  1283.       if (var1 != null) {
  1284.          Enumeration var4 = var1.getAttributes(false);
  1285.  
  1286.          while(var4.hasMoreElements()) {
  1287.             AttributeGroupMember var5 = (AttributeGroupMember)var4.nextElement();
  1288.             if (var5 == var2) {
  1289.                var1.replace(var5, var3);
  1290.             } else if (var5 instanceof AttributeGroup) {
  1291.                this.updateAttrGroupRef((AttributeGroup)var5, var2, var3);
  1292.             }
  1293.          }
  1294.  
  1295.       }
  1296.    }
  1297.  
  1298.    protected void updateModelGroupRef(ContentModel var1, ContentModelTerm var2, ContentModelTerm var3) {
  1299.       if (var1 != null) {
  1300.          var1.replace(var2, var3);
  1301.       }
  1302.    }
  1303.  
  1304.    public void removeDeclaration(BaseDeclaration var1) {
  1305.       FirstNameHashtable var2 = this.getDeclHash(var1);
  1306.       BaseDeclaration var3 = var2 == null ? null : var2.get(var1.getName());
  1307.       if (var1 instanceof AttributeDeclaration) {
  1308.          AttributeDeclaration var4 = (AttributeDeclaration)var1;
  1309.  
  1310.          try {
  1311.             var4.getOwner().remove(var4);
  1312.          } catch (IllegalArgumentException var6) {
  1313.          }
  1314.       }
  1315.  
  1316.       if (var1 instanceof AttributeDeclaration.Owner) {
  1317.          Enumeration var7 = ((AttributeDeclaration.Owner)var1).getOwnedAttributes();
  1318.  
  1319.          while(var7.hasMoreElements()) {
  1320.             AttributeDeclaration var5 = (AttributeDeclaration)var7.nextElement();
  1321.             this.removeDeclaration(var5);
  1322.          }
  1323.       }
  1324.  
  1325.       if (var2 != null) {
  1326.          var2.remove(var1);
  1327.       }
  1328.  
  1329.       int var8 = this.declarations.indexOf(var1);
  1330.       Debug.assert(var8 >= 0, String.valueOf("decl not found in declarations: ").concat(String.valueOf(var1.getName())));
  1331.       this.declarations.removeElementAt(var8);
  1332.       var1.setSchema((SchemaIntf)null);
  1333.       if (var1 instanceof InternalPEDeclaration && var3 == var1) {
  1334.          this.unclaimModelAndAttrGroups((InternalPEDeclaration)var1);
  1335.       }
  1336.  
  1337.       this.unknownAttrGroups.remove(var1);
  1338.       this.unknownModelGroups.remove(var1);
  1339.    }
  1340.  
  1341.    public void bindDeclRef(DeclRef var1) {
  1342.       this.refRegistry.put(var1, var1);
  1343.       if (var1.getPrefix() != null) {
  1344.          this.prefixRegistry.put(var1.getPrefix(), var1);
  1345.       }
  1346.  
  1347.    }
  1348.  
  1349.    public void releaseDeclRef(DeclRef var1) {
  1350.       this.refRegistry.remove(var1, var1);
  1351.       if (var1.getPrefix() != null) {
  1352.          this.prefixRegistry.remove(var1.getPrefix(), var1);
  1353.       }
  1354.  
  1355.    }
  1356.  
  1357.    public int indexOf(BaseDeclaration var1) {
  1358.       return this.declarations.indexOf(var1);
  1359.    }
  1360.  
  1361.    public void write(Writer var1) throws IOException {
  1362.       this.getFlavor().write(var1);
  1363.    }
  1364.  
  1365.    public void write(Writer var1, URI var2) throws IOException {
  1366.       this.getFlavor().write(var1, var2);
  1367.    }
  1368.  
  1369.    public Vector checkConversion(String var1) {
  1370.       Vector var2 = new Vector();
  1371.       if (var1 == null) {
  1372.          return var2;
  1373.       } else {
  1374.          var1 = var1.toLowerCase();
  1375.          if (!FlavorRegistry.getDefaultRegistry().flavorExists(var1)) {
  1376.             return var2;
  1377.          } else if (var1.equals(this.getFlavorName())) {
  1378.             return var2;
  1379.          } else {
  1380.             ConversionScan var3 = new ConversionScan(this, var1);
  1381.             var3.scan();
  1382.             var2 = var3.getWarnings();
  1383.             return var2;
  1384.          }
  1385.       }
  1386.    }
  1387.  
  1388.    public void checkForErrors(BaseDeclaration var1) {
  1389.       this.getFlavor().checkForErrors(var1);
  1390.    }
  1391.  
  1392.    public boolean hasErrors() {
  1393.       if (this.parseErrors.size() > 0) {
  1394.          return true;
  1395.       } else {
  1396.          Enumeration var1 = this.getDeclarations();
  1397.  
  1398.          while(var1.hasMoreElements()) {
  1399.             BaseDeclaration var2 = (BaseDeclaration)var1.nextElement();
  1400.             if (var2.hasErrors()) {
  1401.                return true;
  1402.             }
  1403.          }
  1404.  
  1405.          return false;
  1406.       }
  1407.    }
  1408.  
  1409.    public boolean isCompleteAndConsistent() {
  1410.       return !this.hasErrors() && this.getFlavor().isCompleteAndConsistent();
  1411.    }
  1412.  
  1413.    public void doSecondPassValidation(URI var1) {
  1414.       this.getFlavor().doSecondPassValidation(var1);
  1415.    }
  1416.  
  1417.    public String getSourcePreview(BaseDeclaration var1) {
  1418.       return this.getFlavor().getSourcePreview(var1);
  1419.    }
  1420.  
  1421.    public BaseExemplar createExemplar() {
  1422.       return this.getFlavor().createExemplar(this);
  1423.    }
  1424.  
  1425.    public boolean isSupported(Class var1) {
  1426.       return this.getFlavor().isSupported(var1);
  1427.    }
  1428.  
  1429.    public boolean isSupported(String var1) {
  1430.       return this.getFlavor().isSupported(var1);
  1431.    }
  1432.  
  1433.    public boolean isValidValue(DataTypeIntf var1, String var2) {
  1434.       return this.getFlavor().isValidValue(var1, var2);
  1435.    }
  1436.  
  1437.    public String getDataTypeDisplay(DataTypeIntf var1) {
  1438.       return var1 instanceof DataTypeDeclaration ? ((DataTypeDeclaration)var1).getName() : this.getFlavor().getDataTypeDisplay(var1);
  1439.    }
  1440.  
  1441.    public String getDataTypeSource(DataTypeIntf var1) {
  1442.       return var1 instanceof DataTypeDeclaration ? ((DataTypeDeclaration)var1).getName() : this.getFlavor().getDataTypeSource(var1);
  1443.    }
  1444.  
  1445.    public String getBaseTypeDisplay(DataTypeIntf var1) {
  1446.       return this.getFlavor().getBaseTypeDisplay(var1);
  1447.    }
  1448.  
  1449.    public String getBaseTypeSource(DataTypeIntf var1) {
  1450.       return this.getFlavor().getBaseTypeSource(var1);
  1451.    }
  1452.  
  1453.    public boolean isKnownDisplay(String var1) {
  1454.       return this.getNamedDataType(var1) != null ? true : this.getFlavor().isKnownDisplay(var1);
  1455.    }
  1456.  
  1457.    public DataType createDataTypeFromDisplay(String var1) {
  1458.       if (this.getNamedDataType(var1) != null) {
  1459.          try {
  1460.             DataType var2 = (DataType)this.getNamedDataType(var1).getDataType().clone();
  1461.             if (var2 != null) {
  1462.                var2 = (DataType)var2.clearFacets();
  1463.             }
  1464.  
  1465.             return var2;
  1466.          } catch (Exception var4) {
  1467.             Object var3 = null;
  1468.             return (DataType)var3;
  1469.          }
  1470.       } else {
  1471.          return this.getFlavor().createDataTypeFromDisplay(var1);
  1472.       }
  1473.    }
  1474.  
  1475.    public DataTypeEnumeration getAllTypes() {
  1476.       return this.getFlavor().getAllTypes();
  1477.    }
  1478.  
  1479.    public DataTypeEnumeration getSimpleTypes() {
  1480.       return this.getFlavor().getSimpleTypes();
  1481.    }
  1482.  
  1483.    public DataTypeEnumeration getPrimitiveTypes() {
  1484.       return this.getFlavor().getPrimitiveTypes();
  1485.    }
  1486.  
  1487.    public DataTypeEnumeration getOtherTypes() {
  1488.       return this.getFlavor().getOtherTypes();
  1489.    }
  1490.  
  1491.    public DataTypeIntf getNamedDataTypeIntf(String var1) {
  1492.       if (this.isKnownDisplay(var1)) {
  1493.          return this.createDataTypeFromDisplay(var1);
  1494.       } else {
  1495.          DataTypeDeclaration var2 = this.getNamedDataType(var1);
  1496.          return var2 == null ? null : var2.getDataType();
  1497.       }
  1498.    }
  1499.  
  1500.    public MetaPropHash getMetaPropHash() {
  1501.       return this.metaProps;
  1502.    }
  1503.  
  1504.    public void setShowErrors(boolean var1) {
  1505.       this.showErrors = var1;
  1506.    }
  1507.  
  1508.    public boolean getShowErrors() {
  1509.       return this.showErrors;
  1510.    }
  1511.  
  1512.    public boolean getPrintValidatedBy() {
  1513.       return this.printValidatedBy;
  1514.    }
  1515.  
  1516.    public void setPrintValidatedBy(boolean var1) {
  1517.       this.printValidatedBy = var1;
  1518.    }
  1519. }
  1520.